Spring Controller ve RestController Annotationlar
Bu yazıda Spring Boot @Controller ve @RestController annotation’larının ne işe yaradığını, aralarındaki farkları ve RESTful web servis geliştirmede nasıl kullanıldıklarını ele alıyoruz.
1. @Controller Nedir?
@Controller, Spring MVC mimarisinde kullanılan bir annotation’dır ve genellikle view (HTML sayfa) döndürmek için kullanılır.
Eğer bir metodun çıktısını doğrudan HTTP response body içinde döndürmek istersek, @ResponseBody annotation’ını kullanmamız gerekir.
Örnek Kullanım
@Controller
@Slf4j
public class PostControllerOrnek {
private final PostServiceImpl postService;
public PostControllerOrnek(PostServiceImpl postService) {
this.postService = postService;
}
@RequestMapping(value="/getAllPost", method=RequestMethod.GET)
@ResponseBody
public ResponseEntity<List<PostDto>> getAllPost() {
log.info("PostController -> getAllPost");
List<PostDto> postDtoList = postService.getAllPost();
return ResponseEntity.ok(postDtoList);
}
}
2. @RestController Nedir?
@RestController, Spring 4.0 ile birlikte gelen ve @Controller + @ResponseBody birleşimi olan bir annotation’dır.
RESTful API geliştirme sürecini kolaylaştırmak için kullanılır ve tüm metodların çıktısını otomatik olarak response body’ye yazar.
Örnek Kullanım
@RestController
@RequestMapping("/api/posts")
@Slf4j
@CrossOrigin(origins = "*")
public class PostController {
private final PostServiceImpl postService;
public PostController(PostServiceImpl postService) {
this.postService = postService;
}
}
@Controller vs @RestController Farkları
| Özellik | @Controller | @RestController |
|---|---|---|
| Kullanım amacı | View (HTML) döndürmek | JSON/XML veri döndürmek |
| @ResponseBody ihtiyacı | Gerekli | Gerekmez |
| Kullanım alanı | Web MVC | REST API |
Sonuç
Spring Boot ile web servis geliştirirken doğru annotation seçimi oldukça önemlidir.
@Controller daha çok geleneksel MVC yapılarında kullanılırken, @RestController modern REST API geliştirme süreçlerinde standart haline gelmiştir.